package consul_demo

import (
	"encoding/json"
	"strconv"

	"github.com/asim/go-micro/plugins/config/source/consul/v4"
	"github.com/pkg/errors"
	"go-micro.dev/v4/config"
)

// MySQLConfig 创建结构体
type MySQLConfig struct {
	Host     string `json:"host"`
	User     string `json:"user"`
	Pwd      string `json:"pwd"`
	Database string `json:"dbname"`
	Port     int64  `json:"port"`
}

// GetConsulConfig 设置配置中心
func GetConsulConfig(host string, port int64, prefix string, path string) (string, error) {
	// 添加配置中心
	// 配置中心使用consul key/value模式
	consulSource := consul.NewSource(
		// 设置配置中心地址
		consul.WithAddress(host+":"+strconv.FormatInt(port, 10)),
		// 设置前缀，不设置默认为 /micro/config
		consul.WithPrefix(prefix),
		// 是否移除前缀，这里设置为true：表示可以不带前缀直接获取对应配置
		consul.StripPrefix(true),
	)
	// 配置初始化
	conf, err := config.NewConfig()
	if err != nil {
		return "", errors.Wrap(err, "new config")
	}
	err = conf.Load(consulSource)
	if err != nil {
		return "", errors.Wrap(err, "load config")
	}

	var mysqlCfg MySQLConfig
	err = conf.Get(path).Scan(&mysqlCfg)
	if err != nil {
		return "", errors.Wrap(err, "scn to mysql")
	}
	bs, err := json.Marshal(mysqlCfg)
	if err != nil {
		return "", errors.Wrap(err, "json marshal")
	}
	return string(bs), nil
}
